home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 8614 / 8614.xpi / modules / application / extractors / BuiltinExtractors.jsm next >
Encoding:
Text File  |  2010-02-10  |  3.2 KB  |  122 lines

  1. // DO NOT import this into the global namespace, but instead
  2. // import it into your own namespace wrapper
  3.  
  4. var EXPORTED_SYMBOLS = ["BuiltinExtractors"];
  5.  
  6. Components.utils.import("resource://glydo/application/extractors/DefaultTextExtractor.jsm");
  7.  
  8. BuiltinExtractors = {
  9.     "com.glydo.extractors.builtins.all": function(sandbox,options,callbacks) {
  10.         var n = options.candidates.length;
  11.         var ignoreFailures = options.ignoreFailures || false;
  12.         var completed = 0;
  13.         var failed = false;
  14.         
  15.         var onSubTaskDone = function() {
  16.             ++completed;
  17.             if (completed == n && (ignoreFailures || !failed)) {
  18.                 callbacks.notifyTaskDone();
  19.             }
  20.         };
  21.         
  22.         var onSubTaskFailed = function(reason) {
  23.             if (ignoreFailures) {
  24.                 onSubTaskDone();
  25.             } else {
  26.                 ++completed;
  27.                 failed = true;
  28.                 callbacks.notifyTaskFailed(reason);
  29.             }
  30.         };
  31.         
  32.         for (var i = 0; i < n; ++i) {
  33.             var c = options.candidates[i];
  34.             var subId;
  35.             var subOptions = null;
  36.             if (typeof c == "string") {
  37.                 subId = c;
  38.             } else {
  39.                 subId = c["extractor"];
  40.                 subOptions = c["options"];
  41.             }
  42.             sandbox.importScript(subId);
  43.             var subCallbacks = {};
  44.             subCallbacks["notifyTaskDone"] = onSubTaskDone;
  45.             subCallbacks["notifyTaskFailed"] = onSubTaskFailed;
  46.             subCallbacks["notifyContextItemExtracted"] = callbacks.notifyContextItemExtracted;
  47.             try {
  48.                 sandbox.invoke(subId,subOptions,subCallbacks);
  49.             } catch (ex) {
  50.                 onSubTaskFailed(typeof(ex) == "string" ? ex : (ex.name + ": " + ex.message));
  51.             }
  52.         }
  53.     },
  54.  
  55.     "com.glydo.extractors.builtins.first": function(sandbox,options,callbacks) {
  56.         var n = options.candidates.length;
  57.         var ignoreFailures = options.ignoreFailures || false;
  58.         var cur = 0;
  59.         var found = false;
  60.         
  61.         var onSubTaskDone = function() {
  62.             ++cur;
  63.             if (cur == n || found) {
  64.                 callbacks.notifyTaskDone();
  65.                 return;
  66.             }
  67.             next();
  68.         };
  69.         
  70.         var onSubTaskFailed = function(reason) {
  71.             if (ignoreFailures) {
  72.                 onSubTaskDone();
  73.             } else {
  74.                 callbacks.notifyTaskFailed(reason);
  75.             }
  76.         };
  77.         
  78.         var onSubTaskContextItem = function(item) {
  79.             found = true;
  80.             callbacks.notifyContextItemExtracted(item);
  81.         };
  82.  
  83.         var subCallbacks = {};
  84.         subCallbacks["notifyTaskDone"] = onSubTaskDone;
  85.         subCallbacks["notifyTaskFailed"] = onSubTaskFailed;
  86.         subCallbacks["notifyContextItemExtracted"] = onSubTaskContextItem;
  87.  
  88.         var next = function() {
  89.             var c = options.candidates[cur];
  90.             var subId;
  91.             var subOptions = null;
  92.             if (typeof c == "string") {
  93.                 subId = c;
  94.             } else {
  95.                 subId = c["extractor"];
  96.                 subOptions = c["options"];
  97.             }
  98.             sandbox.importScript(subId);
  99.             try {
  100.                 sandbox.invoke(subId,subOptions,subCallbacks);
  101.             } catch (ex) {
  102.                 onSubTaskFailed(typeof(ex) == "string" ? ex : (ex.name + ": " + ex.message));
  103.             }
  104.                 
  105.         };
  106.         
  107.         next();
  108.     },
  109.     
  110.     "com.glydo.extractors.builtins.text": function(sandbox,options,callbacks) {
  111.         var task = new DefaultTextExtractor.ExtractionTask(sandbox.document,sandbox.document.documentURI,options,callbacks);
  112.         task.execute();
  113.     },
  114.  
  115.     "com.glydo.extractors.abort": function(sandbox,options,callbacks) {
  116.         callbacks.notifyContextItemExtracted("abort_context_extraction");
  117.         callbacks.notifyTaskDone();
  118.     }
  119.  
  120. };
  121.  
  122.